<body>
default implementation of process execution in {@link org.jbpm.pvm.internal.model.ExecutionImpl} 
based on {@link org.jbpm.pvm.internal.model.AtomicOperation}s

<h3>Bidirectional relations</h3>
<p>In this process model thoughout the pvm codebase, there are several bidirectional 
relations.  By convention, the bidirectional relations are maintained on the many side.
This means that when you call for example {@link org.jbpm.pvm.internal.model.ProcessDefinitionImpl#addActivity(org.jbpm.pvm.internal.model.ActivityImpl)}, that 
method will also update the inverse pointer by invoking the 
{@link org.jbpm.pvm.internal.model.ActivityImpl#setProcessDefinition(org.jbpm.pvm.internal.model.ProcessDefinitionImpl)} setter.  Setter methods will be plain setter 
methods and they will NOT update the inverse reference.  (that would cause 
an infinite loop).
</p>

<p>In the same spirit, there is the convention that the many side of bidirection 
relations provide factory methods for the related objects.  Those factory methods 
will also establish the bidirectional relation.  E.g. {@link org.jbpm.pvm.internal.model.ProcessDefinitionImpl#createActivity(String)}.  
</p>

</body>